package com.zero.demo.jms.util;


import com.zero.demo.jms.entity.result.Result;
import com.zero.demo.jms.enums.ResultCodeEnum;

public class ResultUtils
{
	public ResultUtils() {}

	/**
	 * <p>
	 *  说明：返回resultCode=0，参考：
	 * </p>
	 * <p>
	 *  链接：{@link Result} resultCode=0，resultMsg=msg,resultObj=null,sessionId=null
	 * </p>
	 *  * @param msg 错误提示信息
	 *  * @return  result
	 * @auth Steven
	 */
	public static Result returnError(String msg){
		return   returnError(ResultCodeEnum.FAILURE.getCode(),msg);
	}

	/**
	 *
	 * <p>
	 *  说明：返回自定义返回码和自定义提示信息，resultCode=0}
	 * </p>
	 * @param msg 提示信息
	 * @param code 自定义错误返回码，code尽量在10000以上，10000以内的错误返回码为系统保留
	 * @return {@link Result} resultCode=0，resultMsg=msg,resultObj=null,sessionId=null
	 * @author Steven
	 */
	public static Result returnError(Integer code,String msg) {
		return returnError(code,msg,null);
	}

    /**
     *
     * <p>
     *  说明：返回自定义返回码和自定义提示信息，resultCode=0}
     * </p>
     * @param msg 提示信息
     * @param <T> 错误信息
     * @return {@link Result} resultCode=0，resultMsg=msg,resultObj=null,sessionId=null
     * @author Steven
     */
	public static <T> Result returnError(String msg,T obj){
	    return returnError(ResultCodeEnum.FAILURE.getCode(),msg,obj);
    }

    /**
     *
     * <p>
     *  说明：返回自定义返回码和自定义提示信息，resultCode=0}
     * </p>
     * @param msg 提示信息
     * @param code 自定义错误返回码，code尽量在10000以上，10000以内的错误返回码为系统保留
     * @param <T> obj 返回错误信息
     * @return {@link Result} resultCode=0，resultMsg=msg,resultObj=null,sessionId=null
     * @author Steven
     */
	public static <T> Result returnError(Integer code,String msg,T obj){
		Result result=new Result();
		result.setCode(code);
		result.setMsg(msg);
		result.setData(obj);
		return result;
	}
	/**
	 *
	 * <p>
	 *  说明：返回业务处理成功后的提示信息。resultCode=1，参考：{@link ResultCodeEnum}的Success枚举
	 * </p>
	 * @param msg 成功提示信息
	 * @return {@link Result} resultCode=1，resultMsg=msg,resultObj=null,sessionId=null
	 * @author Steven
	 */
	public static Result returnSuccess(String msg)
	{
		 return returnSuccess(msg,null);
	}

	/**
	 *
	 * <p>
	 *  说明：业务逻辑处理成功后，返回提示信息和数据，ResultCode=1
	 * </p>
	 * @param msg 提示信息
	 * @param object 业务数据
	 * @return
	 * @author Steven
	 */
	public static <T> Result<T> returnSuccess(String msg, T object)
	{
		Result<T> result = new Result<T> ();
		result.setCode(ResultCodeEnum.SUCCESS.getCode());
		result.setData(object);
		result.setMsg(msg);
		return result;
	}


	/**
	 *
	 * <p>
	 *  说明：业务逻辑处理成功后，返回提示信息和数据，ResultCode=1
	 * </p>
	 * @param msg 提示消息
	 * @param object 数据
	 * @param sessionId 当前登录用户的sessionId
	 * @return {@link Result<T> >
	 * @author Steven
	 */
	public static <T> Result<T> returnSuccess(String msg, T object, String sessionId)
	{
		Result<T> result = new Result<T> ();
		result.setCode(ResultCodeEnum.SUCCESS.getCode());
		result.setData(object);
		result.setMsg(msg);
		return result;
	}

}
